package com.eurasia.assignment.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.eurasia.assignment.infrastructure.client.hoj.resources.HOJResourceClientLogger;
import com.eurasia.assignment.service.port.out.AccessHOJAuthorizationPort;
import com.eurasia.assignment.service.port.out.HOJAuthToken;

import feign.Logger;
import feign.RequestInterceptor;
import lombok.RequiredArgsConstructor;

@Configuration
@RequiredArgsConstructor
public class FeignConfig {
    private final AccessHOJAuthorizationPort authTokenPort;
    @Bean
    public RequestInterceptor requestInterceptor() {
        return requestTemplate -> {
            HOJAuthToken authorization = authTokenPort.findLatestAuthorization();
            // 添加固定认证头
            requestTemplate.header("Authorization", authorization.getToken());
            // 可以在这里添加其他通用请求头或修改请求
        };
    }
    
    /**
     * 配置Feign客户端的日志级别
     * NONE: 不记录任何日志
     * BASIC: 仅记录请求方法、URL以及响应状态码和执行时间
     * HEADERS: 记录BASIC级别的基础上，记录请求和响应的header
     * FULL: 记录请求和响应的header、body和元数据
     */
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
    
    /**
     * 配置自定义的Feign客户端日志记录器
     * 提供比标准Logger更详细的HTTP请求/响应记录
     */
    @Bean
    Logger feignLogger() {
        return new HOJResourceClientLogger();
    }
}
